/*
 * @Author: 张家亮 1690608011@qq.com
 * @Date: 2022-08-17 17:30:22
 * @LastEditors: 张家亮 1690608011@qq.com
 * @LastEditTime: 2022-08-29 10:25:16
 * @FilePath: \vue-store-server\app\controllers\addrinfoController.js
 * @Description: 我的地址模块控制器
 * 
 * Copyright (c) 2022 by 张家亮 1690608011@qq.com, All Rights Reserved. 
 */
const addrinfoDao = require('../models/dao/addrInfoDao');
const checkLogin = require('../middleware/checkLogin');

module.exports = {
  /**
   * 添加地址
   * @param {Object} ctx
   */
  AddAddress: async ctx => {
    let { user_id, provence, city, country, street } = ctx.request.body;
    // 校验用户是否登录
    if (!checkLogin(ctx, user_id)) {
      return;
    }
    let result = await addrinfoDao.AddAddress(provence, city, country, street);
    // 连接数据库插入地址
    // 操作所影响的记录行数为1,则代表注册成功
    try {
      // 插入成功
      if (result.affectedRows === 1) {
        ctx.body = {
          code: '001',
          msg: '添加地址成功',
          data: result
        }
        return;
      }
    } catch (error) {
      reject(error);
    }

    ctx.body = {
      code: '002',
      msg: '添加地址失败'
    }
  },
  UpdateAddress: async ctx => {
    let { user_id, addr_id, provence, city, country, street } = ctx.request.body;
    // 校验用户是否登录
    if (!checkLogin(ctx, user_id)) {
      return;
    }

    try {
      // 连接数据库插入地址
      let addressResult = await addrinfoDao.UpdateAddress(addr_id, provence, city, country, street);
      // 操作所影响的记录行数为1,则代表注册成功
      if (addressResult.affectedRows != 0) {
        ctx.body = {
          code: '001',
          msg: '修改成功'
        }
        return;
      }
      // 否则失败
      ctx.body = {
        code: '500',
        msg: '修改失败'
      }
    } catch (error) {
      reject(error);
    }
  },
  AddAddrInfo: async ctx => {
    let { user_id, addr_id } = ctx.request.body;

    // 校验用户是否登录
    if (!checkLogin(ctx, user_id)) {
      return;
    }
    try {
      // 把地址信息插入数据库
      const result = await addrinfoDao.AddAddrinfo(user_id, addr_id);
      // 插入成功
      if (result.affectedRows === 1) {
        ctx.body = {
          code: '001',
          msg: '添加地址成功'
        }
        return;
      }
      ctx.body = {
        code: '002',
        msg: '添加地址失败'
      }
    } catch (error) {
      reject(error);
    }
  },
  /**
   * 获取用户的所有地址信息
   * @param {Object} ctx
   */
  GetAddrInfo: async ctx => {
    let { user_id } = ctx.request.body;
    // 校验用户是否登录
    if (!checkLogin(ctx, user_id)) {
      return;
    }
    // 获取所有地址信息
    const addrinfo = await addrinfoDao.GetAddrinfo(user_id);

    // 该用户没有收藏的商品,直接返回信息
    if (addrinfo.length == 0) {
      ctx.body = {
        code: '002',
        msg: '该用户没有地址信息'
      }
      return;
    }
    let addrinfoList = [];
    // 生成收藏商品的详细信息列表
    for (let i = 0; i < addrinfo.length; i++) {
      const temp = addrinfo[i];
      // 获取每个地址详细信息
      const address = await addrinfoDao.GetAddressById(temp.addr_id);
      addrinfoList.push(address[0]);
    }

    ctx.body = {
      code: '001',
      addrinfoList: addrinfoList
    }
  },
  /**
   * 删除用户的地址信息
   * @param {Object} ctx
   */
  DeleteAddrInfo: async ctx => {
    let { user_id, addr_id } = ctx.request.body;
    // 校验用户是否登录
    if (!checkLogin(ctx, user_id)) {
      return;
    }

    // 判断该用户的收藏列表是否存在该商品
    let tempaddrinfo = await addrinfoDao.FindAddrinfo(user_id, addr_id);

    if (tempaddrinfo.length > 0) {
      // 如果存在则删除
      try {
        const result = await addrinfoDao.DeleteAddrinfo(user_id, addr_id);
        // 判断是否删除成功
        if (result.affectedRows === 1) {
          ctx.body = {
            code: '001',
            msg: '删除地址成功'
          }
          return;
        }
      } catch (error) {
        reject(error);
      }
    } else {
      // 不存在则返回信息
      ctx.body = {
        code: '002',
        msg: '该地址不存在'
      }
    }
  }
}